#!/usr/bin/env python
# -*- coding:utf-8 -*-



import numpy as np
# 2. Numpy的random函数简介
# 2.1 numpy.random.rand()
# numpy.random.rand(d0,d1,...,dn)
'''
- rand函数根据给定维度生成[0,1]之间的数据,包含0,不包含1.
- dn表格每个维度.
- 返回值为指定维度的array
'''
# print(np.random.rand(4,2))
# print('--'*20)
# print(np.random.rand(4,3,2)) # shape: 4*3*2

# 2.2 numpy.random.randn()
'''
numpy.random.randn(d0,d1,...,dn)
randn函数返回一个或一组样本,具有标准正态分布.
dn表格每个维度。
返回值为指定维度的array
'''
"""
print(np.random.randn()) # 当没有参数时,返回单个数据
print(np.random.randn(2,4))
print(np.random.randn(4,3,2))
"""


# 2.3 numpy.random.randint()
"""
numpy.random.randint(low,high=None,size=None,dtype="l")`
- 返回随机整数,范围区间为`[low,high]`,包含low,不包含high
- 参数: low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
- high没有填写时,默认生成随机数的范围是[0,low]
"""
print(np.random.randint(1,size=5)) # 返回[0,1]之间的整数,所以只有0
print(np.random.randint(1,5)) # 返回1个[1,5]时间的随机整数
print(np.random.randint(-5,5,size=(2,2)))



# 2.3.2 numpy.random.random_integers(low,high=None,size=None)`
"""
- 返回随机整数,范围区间为`[low,high]`,包含low和high.
- 参数: low为最小值,high为最大值,size为数组维度大小.
- high没有填写时,默认生成随机数的范围是`[1,low]`.

**该函数已被替代,建议使用randint函数.**
"""
print('='*40)
print(np.random.random_integers(1,size=5))



# 2.4 生成[0,1]之间的浮点数
print('-------random_sample------------')
print(np.random.random_sample(size=(2,2)))
print('-----------random-------------')
print(np.random.random(size=(2,2)))
print('---------ranf----------------')
print(np.random.ranf(size=(2,2)))
print('----------sample-------------')
print(np.random.sample(size=(2,2)))



# 2.5 numpy.random.choice()
'''
numpy.random.choice(a,size=None,replace=True,p=None)
- 从给定的一维数组中生成随机数 
- 参数：a 为一维数组类似数据或整数；size 为数组维度；p 为数组中的数据出现的概率 
- a 为整数时，对应的一维数组为 np.arange(a) 
'''

print('-----random.choice-----------------')
print(np.random.choice(5,3))
print(np.random.choice(5,3,replace=False))
# 当replace为False时,生成的随机数不能有重复的数值.

print('--size--'*20)
print(np.random.choice(5,size=(3,2)))

print('---demo----'*20)
demo_list = ['lenovo','sansumg','moto','xiaomi','vivo','iphone']
print(np.random.choice(demo_list,size=(3,3)))
'''
- 参数p的长度与参数a的长度需要一致.
- 参数p为概率,p里的数据之和应为1.
'''



# 2.6 numpy.random.seed()
'''
- np.random.seed() 的作用：使得随机数据可预测。 
- 当我们设置相同的 seed，每次生成的随机数相同。如果不设置 seed，则每次会生成不同的随机数
'''
print('--seed--'*10)
print(np.random.seed(0))
print(np.random.rand(5))
print('--test--'*15)
print(np.random.seed(1676))
print(np.random.rand(5))
print('--'*20)




# 3.1 Meshgrid函数的基本用法
#  meshgrid 函数用两个坐标轴上的点在平面上画网格。

# 加载数据
import numpy as np 
import matplotlib.pyplot as plt 

m, n = (5,3)
x = np.linspace(0,1,m)
y = np.linspace(0,1,n)

X, Y = np.meshgrid(x,y)
# 查看向量x和向量y
print(x)
print(y)
print('--'*20)

# 查看矩阵X和矩阵Y
print(X)
print(Y)

# 查看矩阵对应的维度
print(X.shape)
print(Y.shape)

# 可以通过在matplotlib中进行可视化,来查看函数运行后得到的网格化数据的结果
plt.plot(X,Y,marker='.',color='blue',linestyle='none')
# plt.show()

# 获得网格平面上坐标点的数据
z = [i for i in zip(X.flat,Y.flat)]
print(z)

